/* <template>
	<!-- 只允许输入自然数  -->
	<el-input v-model="form.numbers" @input="checkInt(form,'numbers',form.numbers)"></el-input>
	<el-input v-model="numbers" @input="checkInt('numbers',number)"></el-input>
	<!-- 只允许输入正整数 -->
	<el-input v-model="form.positive" @input="checkPositive(form,'positive',form.positive)"></el-input>
	<el-input v-model="positive" @input="checkPositive('positive',positive)"></el-input>
	<!-- 小数点后两位 -->
	<el-input v-model="form.float_num" @input="checkFloat(2,form.float_num,form,'float_num')"></el-input>
	<el-input v-model="float_num" @input="checkFloat(2,float_num,'float_num')"></el-input>
<template/>

<script>
import checkNum from "@/mixins/checknum";
export default {
	// 在这里添加引入的mixins
	mixins: [checkNum],
	data(){
		return {
			form: {
				numbers: "",
				positive: "",
				float_num: ""
			},
			numbers: "",
			positive: "",
			float_num: ""
		}
	}
}
</script>
*/

export default {
  methods: {
    /**
     * 整数
     * @description 情况一：深度改变对象中的数字
     * @param {Object} object 数字的父对象
     * @param {String} target 要监听的字段
     * @param {Number} value 数字
     * @description 情况二：改变的仅是data中的数字
     * @param {String} target 要监听的字段
     * @param {Number} value 数字
     * @param arg
     * */
    checkInt(...arg) {
      const reg = /[^0-9$]/g
      if (arg.length === 3) {
        const object = arg[0]
        const target = arg[1]
        const value = arg[2]
        const number = value.replace(reg, '')
        this.$set(object, target, number)
      } else {
        const target = arg[0]
        const value = arg[1]
        this.$data[target] = value.replace(reg, '')
      }
    },
    /**
     * 正整数
     * @description 情况一：深度改变对象中的数字
     * @param {Object} object 数字的父对象
     * @param {String} target 要监听的字段
     * @param {Number} value 数字
     * @description 情况二：改变的仅是data中的数字
     * @param {String} target 要监听的字段
     * @param {Number} value 数字
     * */
    checkPositive(...arg) {
      if (arg.length === 3) {
        const object = arg[0]
        const target = arg[1]
        const value = arg[2]
        const flag = new RegExp('^[1-9][0-9]{0,}$').test(value)
        flag || this.$set(object, target, '')
      } else {
        const target = arg[0]
        const value = arg[1]
        const flag = new RegExp('^[1-9][0-9]{0,}$').test(value)
        if (!flag) {
          this.$data[target] = ''
        }
      }
    },
    /**
     * 限制数字输入小数点后几位
     * @description 情况一：深度改变对象中的数字
     * @param {Number} limit 允许输入小数点后几位 例：1代表允许输入小数点后1位
     * @param {Number} nums input框输入的值
     * @param {Number} object 数字的父对象
     * @param {String} target 要监听的字段
     * @description 情况二：改变的仅是data中的数字
     * @param {Number} limit 允许输入小数点后几位 例：1代表允许输入小数点后1位
     * @param {Number} nums input框输入的值
     * @param {String} target 要监听的字段
     * */
    checkFloat(...arg) {
      const onlyDecimal = (num, limit) => {
        let number = null
        if (num.indexOf('.') !== -1) {
          var str_ = num.substr(num.indexOf('.') + 1)
          if (str_.indexOf('.') !== -1) {
            number = num.substr(0, num.indexOf('.') + str_.indexOf('.') + 1)
          }
        }
        const array = num.split('.')
        if (!!array[1] && array[1].length > limit) {
          array[1] = array[1].substr(0, limit)
          number = array[0] + '.' + array[1]
        }
        return number
      }

      const limit = arg[0]
      let nums = arg[1]
      if (nums) {
        nums = nums.replace(/^0+(\d)/, '$1').replace(/^\./, '0.').replace(/[^0-9.]/g, '')
        if (onlyDecimal(nums, limit) != null) {
          nums = onlyDecimal(nums, limit)
        }
      }

      if (arg.length === 4) {
        const object = arg[2]
        const target = arg[3]
        this.$set(object, target, nums)
      } else {
        const target = arg[2]
        this.$data[target] = nums
      }
    },
    /**
     * @description 计算小数点后面有几位数
     * @param {Number} n 要验证的数字
     *
     */
    countFloat(n) {
      try {
        return n.toString().split('.')[1].length
      } catch (err) {
        return 0
      }
    }
  }
}

